#include "xmux_task.h"
extern "C" {
#include <libavformat/avformat.h>
}
using namespace std;
void XMuxTask::Do(AVPacket *pkt) {
  pkts_.Push(pkt);
  Next(pkt);// 将数据传递给下一个
}
void XMuxTask::Main() {
  xmux_.WriteHeader();
  while (!is_exit()) {
    unique_lock<mutex> lock(mtx_);
    auto pkt = pkts_.Pop();
    if (!pkt) {
      MSleep(1);
      continue;
    }
    xmux_.Write(pkt);
    av_packet_free(&pkt);
  }
  xmux_.WriteEnd();
xmux_.set_c(nullptr);
}

bool XMuxTask::Open(const char *url, 
AVCodecParameters *video_para,
                    AVRational *video_time_base, 
					AVCodecParameters *audio_para,
                    AVRational *audio_time_base
					) 
					{
  auto c = xmux_.Open(url, video_para, audio_para);
  if (!c) {
    LOGFATAL("open " << url << " failed");
    return false;
  }
  xmux_.set_c(c);
  xmux_.set_src_video_time_base(video_time_base);
  xmux_.set_src_audio_time_base(audio_time_base);
  return true;
}